package com.softtown.modules.organization.controller;

import com.github.pagehelper.PageInfo;
import com.softtown.common.annotation.LogOperation;
import com.softtown.common.utils.Result;
import com.softtown.common.validator.ValidatorUtils;
import com.softtown.modules.organization.dto.CompSysParamIsRequiredDTO;
import com.softtown.modules.sys.dto.CompSysParamDTO;
import com.softtown.modules.sys.dto.CompSysParamPageDTO;
import com.softtown.modules.sys.entity.CompSysParamEntity;
import com.softtown.modules.sys.service.CompSysParamService;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import javax.annotation.Resource;
import net.sf.json.JSONObject;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

/**
 * @author: Dingyayong
 * @Date: 2019/8/2 15:30
 * @Description:
 */

@RestController
@RequestMapping("comp/param")
@Api(tags = "公司参数")
public class CompSysParamController {

    @Resource
    private CompSysParamService compSysParamService;

    /**
     * 获取费目层级
     *
     * @param companyId 公司id
     * @return com.softtown.common.utils.Result<com.softtown.modules.sys.entity.CompSysParamEntity>
     * @Author Dingyayong
     * @Date 2020/4/13 20:43
     */
    @PostMapping("getParamValue")
    @ApiOperation("获取费目层级")
    @LogOperation("获取费目层级")
    public Result<CompSysParamEntity> getParamValue(@RequestBody String companyId) {
        String compId = JSONObject.fromObject(companyId).get("compId").toString();
        CompSysParamEntity finExpItemList = compSysParamService.findItemMaxLevel(Long.valueOf(compId));
        return new Result<CompSysParamEntity>().ok(finExpItemList);
    }

    /**
     * 获取默认币种
     *
     * @param companyId 公司id
     * @return com.softtown.common.utils.Result<com.softtown.modules.sys.entity.CompSysParamEntity>
     * @Author Dingyayong
     * @Date 2020/4/13 20:44
     */
    @PostMapping("getCurrValue")
    @ApiOperation("获取默认币种")
    @LogOperation("获取默认币种")
    public Result<CompSysParamEntity> getCurrValue(@RequestBody String companyId) {
        String compId = JSONObject.fromObject(companyId).get("compId").toString();
        CompSysParamEntity findCurrValue = compSysParamService.findCurrValue(Long.valueOf(compId));
        return new Result<CompSysParamEntity>().ok(findCurrValue);
    }

    /**
     * @param @param [companyId]
     * @return @return com.softtown.common.utils.Result<com.softtown.modules.sys.entity.CompSysParamEntity>
     * @throws
     * @Title: getTrvlExpPlanValue
     * @Description: 获取费用归集码是否必须参数
     * @author fuming
     * @date 2019/8/25 21:03
     */
    @PostMapping("getExpClctCdParamValue")
    @ApiOperation("获取费用归集码是否必须(出差申请单)")
    @LogOperation("获取费用归集码是否必须(出差申请单)")
    public Result<CompSysParamEntity> getExpClctCdParamValue(@RequestBody String companyId) {
        String compId = JSONObject.fromObject(companyId).get("compId").toString();
        CompSysParamEntity isReqTrvlExpPlanValue = compSysParamService.findExpClctCdIsReqTrvlExpPlanValue(Long.valueOf(compId));
        return new Result<CompSysParamEntity>().ok(isReqTrvlExpPlanValue);
    }

    /**
     * @param @param [companyId]
     * @return @return com.softtown.common.utils.Result<com.softtown.modules.sys.entity.CompSysParamEntity>
     * @throws
     * @Title: getValue
     * @Description: 获取行程明细是否必须参数
     * @author fuming
     * @date 2019/8/25 21:05
     */
    @PostMapping("getTodoParamValue")
    @ApiOperation("获取行程明细是否必须(出差申请单)")
    @LogOperation("获取行程明细是否必须(出差申请单)")
    public Result<CompSysParamEntity> getTodoParamValue(@RequestBody String companyId) {
        String compId = JSONObject.fromObject(companyId).get("compId").toString();
        CompSysParamEntity reqTrvlExpPlanValue = compSysParamService.findTodoIsReqTrvlExpPlanValue(Long.valueOf(compId));
        return new Result<CompSysParamEntity>().ok(reqTrvlExpPlanValue);
    }

    /**
     * 添加公司参数
     *
     * @param sysParamDTO 公司参数设置DTO
     * @return com.softtown.common.utils.Result
     * @Author Dingyayong
     * @Date 2020/4/13 20:44
     */
    @PostMapping("addCompParam")
    @ApiOperation("添加公司参数")
    @LogOperation("添加公司参数")
    public Result addCompParam(@RequestBody CompSysParamDTO sysParamDTO) {
        compSysParamService.addCompParam(sysParamDTO);
        return new Result<>();
    }

    /**
     * 差旅报销前出差申请必须
     *
     * @param sysParamDTO 公司参数设置DTO
     * @return com.softtown.common.utils.Result<com.softtown.modules.sys.entity.CompSysParamEntity>
     * @Author Dingyayong
     * @Date 2020/4/13 20:45
     */
    @PostMapping("checkExpenseAppl")
    @ApiOperation("差旅报销前出差申请必须")
    @LogOperation("差旅报销前出差申请必须")
    public Result<CompSysParamEntity> checkExpenseAppl(@RequestBody CompSysParamDTO sysParamDTO) {
        CompSysParamEntity compSysParamEntity = compSysParamService.checkExpenseAppl(sysParamDTO);
        return new Result<CompSysParamEntity>().ok(compSysParamEntity);
    }

    /**
     * 自己审批自己单据
     *
     * @param sysParamDTO 公司参数设置DTO
     * @return com.softtown.common.utils.Result<com.softtown.modules.sys.entity.CompSysParamEntity>
     * @Author Dingyayong
     * @Date 2020/4/13 20:45
     */
    @PostMapping("checkApplBySelf")
    @ApiOperation("自己审批自己单据")
    @LogOperation("自己审批自己单据")
    public Result<CompSysParamEntity> checkApplBySelf(@RequestBody CompSysParamDTO sysParamDTO) {
        CompSysParamEntity compSysParamEntity = compSysParamService.checkApplBySelf(sysParamDTO);
        return new Result<CompSysParamEntity>().ok(compSysParamEntity);
    }

    /**
     * 获取费用归集码是否必须(差旅报销)
     *
     * @param sysParamDTO 公司参数设置DTO
     * @return com.softtown.common.utils.Result<com.softtown.modules.sys.entity.CompSysParamEntity>
     * @Author Dingyayong
     * @Date 2020/4/13 20:46
     */
    @PostMapping("getExpClctCdExpense")
    @ApiOperation("获取费用归集码是否必须(差旅报销)")
    @LogOperation("获取费用归集码是否必须(差旅报销)")
    public Result<CompSysParamEntity> getExpClctCdExpense(@RequestBody CompSysParamDTO sysParamDTO) {
        CompSysParamEntity compSysParamEntity = compSysParamService.getExpClctCdExpense(sysParamDTO);
        return new Result<CompSysParamEntity>().ok(compSysParamEntity);
    }

    /**
     * 费用发生/核销确定基准
     *
     * @param sysParamDTO 公司参数设置DTO
     * @return com.softtown.common.utils.Result<com.softtown.modules.sys.entity.CompSysParamEntity>
     * @Author Dingyayong
     * @Date 2020/4/13 20:47
     */
    @PostMapping("getGenlExpActTiMing")
    @ApiOperation("费用发生/核销确定基准")
    @LogOperation("费用发生/核销确定基准)")
    public Result<CompSysParamEntity> getGenlExpActTiMing(@RequestBody CompSysParamDTO sysParamDTO) {
        CompSysParamEntity compSysParamEntity = compSysParamService.getGenlExpActTiMing(sysParamDTO);
        return new Result<CompSysParamEntity>().ok(compSysParamEntity);
    }

    /**
     * 修改公司参数
     *
     * @param sysParamDTO 公司参数设置DTO
     * @return com.softtown.common.utils.Result
     * @Author Dingyayong
     * @Date 2020/4/13 20:47
     */
    @PostMapping("editCompParam")
    @ApiOperation("修改公司参数")
    @LogOperation("修改公司参数")
    public Result editCompParam(@RequestBody CompSysParamDTO sysParamDTO) {
        compSysParamService.editCompParam(sysParamDTO);
        return new Result<>();
    }

    /**
     * 获取公司参数
     *
     * @param sysParamDTO 公司参数设置DTO
     * @return com.softtown.common.utils.Result<com.softtown.modules.sys.entity.CompSysParamEntity>
     * @Author Dingyayong
     * @Date 2020/4/13 20:48
     */
    @PostMapping("findValueByCompAndCode")
    @ApiOperation("获取公司参数")
    @LogOperation("获取公司参数")
    public Result<CompSysParamEntity> findValueByCompAndCode(@RequestBody CompSysParamDTO sysParamDTO) {
        CompSysParamEntity compSysParamEntity =
                compSysParamService.findValueByCompAndCode(sysParamDTO.getCompId(), sysParamDTO.getParamCode());
        return new Result<CompSysParamEntity>().ok(compSysParamEntity);
    }

    /**
     * 获取所有公司参数List
     *
     * @param compSysParamPageDTO 公司参数设置分页DTO
     * @return com.softtown.common.utils.Result
     * @Author Dingyayong
     * @Date 2020/4/13 20:49
     */
    @PostMapping("getCompParamsList")
    @ApiOperation("获取所有公司参数")
    @LogOperation("获取所有公司参数")
    public Result getCompParamsList(@RequestBody CompSysParamPageDTO compSysParamPageDTO) {
        PageInfo<CompSysParamEntity> compSysParamEntitys =
                compSysParamService.getCompParamsList(compSysParamPageDTO);
        return new Result<PageInfo<CompSysParamEntity>>().ok(compSysParamEntitys);
    }

    /**
     * 获取所有公司参数
     *
     * @param compSysParamPageDTO 公司参数设置分页DTO
     * @return com.softtown.common.utils.Result
     * @Author Dingyayong
     * @Date 2020/4/13 20:50
     */
    @PostMapping("getCompParams")
    @ApiOperation("获取所有公司参数")
    @LogOperation("获取所有公司参数")
    public Result getCompParams(@RequestBody CompSysParamPageDTO compSysParamPageDTO) {
        PageInfo<CompSysParamEntity> compSysParamEntitys =
                compSysParamService.getCompParamsList(compSysParamPageDTO);
        return new Result<PageInfo<CompSysParamEntity>>().ok(compSysParamEntitys);
    }

    /**
     * 获取差旅出差申请单是否必填
     *
     * @param compSysParamIsRequiredDTO 公司参数是否必填DTO
     * @return com.softtown.common.utils.Result
     * @Author fuming
     * @Date 2020/4/13 20:51
     */
    @PostMapping("getTrvlPlanIsRequired")
    @ApiOperation("获取差旅出差申请单是否必填")
    @LogOperation("获取差旅出差申请单是否必填")
    public Result getTrvlPlanIsRequired(@RequestBody CompSysParamIsRequiredDTO compSysParamIsRequiredDTO) {
        ValidatorUtils.validateEntity(compSysParamIsRequiredDTO);
        Boolean flag = compSysParamService.getTrvlIsRequired(compSysParamIsRequiredDTO);
        return new Result<>().ok(flag);
    }

    /**
     * 获取差旅费用归集码是否必填
     *
     * @param compSysParamIsRequiredDTO 公司参数是否必填DTO
     * @return com.softtown.common.utils.Result
     * @Author fuming
     * @Date 2020/4/13 20:51
     */
    @PostMapping("getTrvlActClctCdIsRequired")
    @ApiOperation("获取差旅费用归集码是否必填")
    @LogOperation("获取差旅费用归集码是否必填")
    public Result getTrvlActClctCdIsRequired(@RequestBody CompSysParamIsRequiredDTO compSysParamIsRequiredDTO) {
        ValidatorUtils.validateEntity(compSysParamIsRequiredDTO);
        Boolean flag = compSysParamService.getTrvlActClcdIsRequired(compSysParamIsRequiredDTO);
        return new Result<>().ok(flag);
    }

    /**
     * 获取费用报销出差申请单是否必填
     *
     * @param compSysParamIsRequiredDTO 公司参数是否必填DTO
     * @return com.softtown.common.utils.Result
     * @Author fuming
     * @Date 2020/4/13 20:52
     */
    @PostMapping("getGenlPlanIsRequired")
    @ApiOperation("获取费用报销出差申请单是否必填")
    @LogOperation("获取费用报销出差申请单是否必填")
    public Result getGenlPlanIsRequired(@RequestBody CompSysParamIsRequiredDTO compSysParamIsRequiredDTO) {
        ValidatorUtils.validateEntity(compSysParamIsRequiredDTO);
        Boolean flag = compSysParamService.getGenlActIsRequired(compSysParamIsRequiredDTO);
        return new Result<>().ok(flag);
    }

    /**
     * 获取费用报销归集码是否必填
     *
     * @param compSysParamIsRequiredDTO 公司参数是否必填DTO
     * @return com.softtown.common.utils.Result
     * @Author fuming
     * @Date 2020/4/13 20:52
     */
    @PostMapping("getGenlActClctCdIsRequired")
    @ApiOperation("获取费用报销归集码是否必填")
    @LogOperation("获取费用报销归集码是否必填")
    public Result getGenlActClctCdIsRequired(@RequestBody CompSysParamIsRequiredDTO compSysParamIsRequiredDTO) {
        ValidatorUtils.validateEntity(compSysParamIsRequiredDTO);
        Boolean flag = compSysParamService.getGenlActClcdIsRequired(compSysParamIsRequiredDTO);
        return new Result<>().ok(flag);
    }

    /**
     * 获取费用申请归集码是否必填
     *
     * @param compSysParamIsRequiredDTO 公司参数是否必填DTO
     * @return com.softtown.common.utils.Result
     * @Author fuming
     * @Date 2019/12/30 11:02
     */
    @PostMapping("getGenlPlanClctCdIsRequired")
    @ApiOperation("获取费用申请归集码是否必填")
    @LogOperation("获取费用申请归集码是否必填")
    public Result getGenlPlanClctCdIsRequired(@RequestBody CompSysParamIsRequiredDTO compSysParamIsRequiredDTO) {
        ValidatorUtils.validateEntity(compSysParamIsRequiredDTO);
        Boolean flag = compSysParamService.getGenlPlanClcdIsRequired(compSysParamIsRequiredDTO);
        return new Result<>().ok(flag);
    }

    /**
     * 获取付款申请归集码是否必填
     *
     * @param compSysParamIsRequiredDTO 公司参数是否必填DTO
     * @return com.softtown.common.utils.Result
     * @Author fuming
     * @Date 2020/4/13 20:53
     */
    @PostMapping("getSpdPayClctCdIsRequired")
    @ApiOperation("获取付款申请归集码是否必填")
    @LogOperation("获取付款申请归集码是否必填")
    public Result getSpdPayClctCdIsRequired(@RequestBody CompSysParamIsRequiredDTO compSysParamIsRequiredDTO) {
        ValidatorUtils.validateEntity(compSysParamIsRequiredDTO);
        Boolean flag = compSysParamService.getSpdPayClctCdIsRequired(compSysParamIsRequiredDTO);
        return new Result<>().ok(flag);
    }

    /**
     * 获取请款单据号是否必填
     *
     * @param compSysParamIsRequiredDTO 公司参数是否必填DTO
     * @return com.softtown.common.utils.Result
     * @Author fuming
     * @Date 2020/4/13 20:53
     */
    @PostMapping("getRequiredPay")
    @ApiOperation("获取请款单据号是否必填")
    @LogOperation("获取请款单据号是否必填")
    public Result getRequiredPay(@RequestBody CompSysParamIsRequiredDTO compSysParamIsRequiredDTO) {
        ValidatorUtils.validateEntity(compSysParamIsRequiredDTO);
        Boolean flag = compSysParamService.getRequiredPay(compSysParamIsRequiredDTO);
        return new Result<>().ok(flag);
    }
}
